package helexis.game.tyrian.screen;

import static com.badlogic.gdx.scenes.scene2d.actions.Actions.delay;
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.fadeIn;
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.fadeOut;
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.sequence;
import helexis.game.tyrian.Tyrian;

import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.scenes.scene2d.Action;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.utils.Align;
import com.badlogic.gdx.utils.Scaling;

public class SplashScreen extends AbstractScreen {
	
	private Texture splashTexture;
	private Image splashImage;
	
	public SplashScreen(Tyrian game) {
		super(game);
	}//end of constructor
	
	
	@Override
	public void show() {
		super.show();
		
		/*
		 * Tutorial 2.
		 * 
		 * 이미지를 로딩해서 텍스처 리전을 생성함
		 */
		this.splashTexture = new Texture("splash.png");
		
		// 선형 텍스처 필터를 사용해서 쭉 잡아 늘림...;;
		this.splashTexture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
		
		/*
		 * Tutorial 3.
		 * 
		 * 아래 TextureRegion 생성 부분을 resize() 메소드로 옮김.
		 */
//		/*
//		 * 이미지 아틀라스 내에서 우리 스플래시 이미지는 왼쪽 위 (0, 0) 에서 시작함.
//		 * 그리고 이미지 크기는 512 X 301
//		 */
//		this.splashTextureRegion = new TextureRegion(this.splashTexture, 0, 0, 512, 301);
	
	/*
	 * Tutorial 3.
	 * 
	 * render() 메소드 구현 삭제... AbstractScreen 에서 Stage 를 사용하여 구현함 !
	 */
//	@Override
//	public void render(float delta) {
//		super.render(delta);
//		
//		/*
//		 * Tutorial 2.
//		 * 
//		 * SpriteBatch 를 사용해서 2D 텍스처를 그릴꺼임...
//		 * (SpriteBatch 는 AbstractScreen 에 있어야 함..!)
//		 */
//		batch.begin();
//		
//		/*
//		 * SpriteBatch 한테 왼쪽 아래의 (0, 0) 부터 시작해서 
//		 * 스크린 사이즈 만큼 그리라고 지시...
//		 */
//		batch.draw(this.splashTextureRegion, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
//		
//		// 그리는 거 끝 ~~
//		batch.end();
//	}
	
		
		/*
		 * Tutorial 3.
		 * 
		 * Stage 를 클리어 시킴 !
		 */
		stage.clear();
		
		/*
		 * 이미지 아틀라스 내에서 우리 스플래시 이미지는 왼쪽 위 (0, 0) 에서 시작함.
		 * 그리고 이미지 크기는 512 X 301
		 */
		TextureRegion splashTextureRegion = new TextureRegion(this.splashTexture, 0, 0, 512, 301);
		
		/*
		 * Tutorial 3.
		 * 
		 * 여기에서 스플래시 이미지 액터를 생성하고 크기를 설정함
		 * 
		 * Tutorial 5.
		 * 
		 * 크기를 설정하는 부분은 resize() 메소드에서 처리하도록 옮김 !
		 */
//		Image splashImage = new Image(splashTextureRegion, Scaling.stretch, Align.bottom | Align.left);
		this.splashImage = new Image(splashTextureRegion);
		
		this.splashImage.setScaling(Scaling.stretch);
		this.splashImage.setAlign(Align.bottom | Align.left);
		
		
		/*
		 * fade-in 이펙트가 정상적으로 동작하기 위해서 필요한 부분.
		 * 이미지를 완벽하게 투명하게 만든다.
		 */
		this.splashImage.getColor().a = 0f;
		
		/*
		 * 액트가 수행할 액션을 지정한다.
		 * 여기서는 스플래시 이미지에 fade-in/fade-out 효과를 설정할 것이다.
		 */
		this.splashImage.addAction(sequence(
				fadeIn(0.2f),
				delay(0.6f),
				fadeOut(0.2f),
				new Action() {
					
					@Override
					public boolean act(float delta) {

						/*
						 * 스플래시 이미지가 fade-out 되고 나면,
						 * 다음 스크린인 메뉴 스크린으로 옮긴다 !
						 */
						game.setScreen(game.getMenuScreen());
						
						return false;
					}//end of act()
					
				}
		));
		
		/*
		 * 마지막으로 생성한 액터를 스테이지에 추가함 !
		 */
		stage.addActor(this.splashImage);
		
		
	}//end of show()
	
	
	
	@Override
	public void resize(int width, int height) {

		super.resize(width, height);
		
		/*
		 * Tutorial 5.
		 * 
		 * 스플래시 이미지를 리사이즈 함 !
		 */
		this.splashImage.setWidth(width);
		this.splashImage.setHeight(height);
		
		/*
		 * 그리기를 끝냄...
		 */
		this.splashImage.invalidateHierarchy();
		
	}//end of resize()
	
	
	
	@Override
	public void dispose() {
		
		super.dispose();
		
		this.splashTexture.dispose();
		
	}
	

}
//end of SplashScreen.java